import csv

# 假设txt文件名为'labs.txt'
input_filename = 'D:/Courses/SmallThree/scrapy_spider/output.txt'
# 输出的CSV文件名
output_filename = 'D:/Courses/SmallThree/scrapy_spider/labs.csv'

# 用于保存实验室信息的列表
labs = []

# 临时变量，用于在读取文件时累积当前实验室的信息
current_lab = {}

# 读取txt文件
with (open(input_filename, 'r', encoding='utf-8') as file):
    lines = file.readlines()

    # 假设每个实验室的信息从名称开始，直到遇到下一个名称或文件结束
    i = 0
    while i < len(lines):
        line = lines[i].strip().strip('*')

        # 检查是否是新的实验室名称
        if line.startswith(('实验室名称', '**实验室名称')):
            # 如果不是第一个实验室，则保存前一个实验室的信息
            if current_lab:
                labs.append(current_lab)
                current_lab = {}

                # 提取实验室名称
            current_lab['名称'] = line.split('：')[1]

            # 检查是否是实验室简介
        elif line.startswith(('实验室简介', '**实验室简介')):
            # 提取简介并去除开头的标签，然后合并后续的行（如果简介跨越多行）
            current_lab['简介'] = line.strip().split('：')[-1] if '：' in line else line.strip()
            #line.split('：')[1].strip()
            j = i + 1
            while j < len(lines) and not lines[j].strip().startswith(('实验室名称', '实验室名称', '负责人', '领导', '主任信息',
                                                                      '主要负责单位', '负责领域', '建立年份', '所在省份')):
                current_lab['简介'] += '\n' + lines[j].strip()
                j += 1
            i = j - 1  # 调整索引以跳过简介的后续行

        # 检查是否是负责人/领导/主任信息
        elif line.startswith(('负责人', '领导', '主任信息', '主要负责单位',
                              '**负责人', '**领导', '**主任信息', '**主要负责单位')):
            # 提取负责人信息并去除开头的标签
            key = '负责人信息'
            current_lab[key] = line.strip().strip('。').split('：')[-1].split('、')[0].split('根')[0] if '：' in line else line.strip().strip('。').split('（')[0].split('、')[0].split('根')[0]

            #if not line.endswith('：'):
                # 如果行末尾没有冒号，则假设该行就是完整的信息
                #current_lab[key] = line.strip().split('：')[-1] if '：' in line else line.strip()
            #else:
                # 如果行末尾有冒号，则合并后续的行（如果信息跨越多行）
                #current_lab[key] = line.split('：')[1].strip()
            j = i + 1
            while j < len(lines) and not lines[j].strip().startswith(('实验室名称', '实验室名称', '负责人', '领导', '主任信息',
                                                                      '主要负责单位', '负责领域', '建立年份', '所在省份')):
                current_lab[key] += '\n' + lines[j].strip()
                j += 1
            i = j - 1  # 调整索引以跳过信息的后续行

        # 检查是否是负责领域
        elif line.startswith(('负责领域', '**负责领域')):
            # 提取负责领域并去除开头的标签
            key = '负责领域'
            current_lab[key] = line.strip().strip('。').split('：')[-1].split('（')[0].split('、')[0].split('根')[0] if '：' in line else line.strip().strip('。').split('（')[0].split('、')[0].split('根')[0]
            j = i + 1
            while j < len(lines) and not lines[j].strip().startswith(('实验室名称', '实验室名称', '负责人', '领导', '主任信息',
                                                                      '主要负责单位', '负责领域', '建立年份', '所在省份')):
                current_lab[key] += '\n' + lines[j].strip().strip('。')
                j += 1
            i = j - 1  # 调整索引以跳过信息的后续行


        # 检查是否是建立年份
        elif line.startswith(('建立年份', '**建立年份')):
            # 提取负责领域信息并去除开头的标签
            key = '建立年份'
            current_lab[key] = line.strip().strip('。').split('：')[-1].split('（')[0].split('、')[0].split('根')[0] if '：' in line else line.strip().strip('。').split('（')[0].split('、')[0].split('根')[0]
            j = i + 1
            while j < len(lines) and not lines[j].strip().startswith(('实验室名称', '实验室名称', '负责人', '领导', '主任信息',
                                                                      '主要负责单位', '负责领域', '建立年份', '所在省份')):
                current_lab[key] += '\n' + lines[j].strip().strip('。')
                j += 1
            i = j - 1  # 调整索引以跳过信息的后续行


        # 检查是否是所在省份
        elif line.startswith(('所在省份', '**所在省份')):
            # 提取负责领域信息并去除开头的标签
            key = '所在省份'
            current_lab[key] = line.strip().strip('。').split('：')[-1].split('（')[0].split('、')[0].split('根')[0].split('注')[0].strip('\n') if '：' in line else line.strip().strip('。').split('(')[0].split('、')[0].split('根')[0].split('注')[0].strip('\n')
            j = i + 1
            while j < len(lines) and not lines[j].strip().startswith(('实验室名称', '实验室名称', '负责人', '领导', '主任信息',
                                                                      '主要负责单位', '负责领域', '建立年份', '所在省份')):
                current_lab[key] += lines[j].strip().strip('。').split('(')[0].split('、')[0].split('根')[0].split('注')[0].strip('\n')  #'\n' +
                j += 1
            i = j - 1  # 调整索引以跳过信息的后续行

        i += 1

        # 保存最后一个实验室的信息
    if current_lab:
        labs.append(current_lab)

    # 写入CSV文件
with open(output_filename, 'w', newline='', encoding='utf-8') as csvfile:
    writer = csv.DictWriter(csvfile, fieldnames=['名称', '简介', '负责人信息', '负责领域', '建立年份', '所在省份'])
    writer.writeheader()
    for lab in labs:
        writer.writerow(lab)

print(f'CSV文件已生成：{output_filename}')